/**
 * @file controlpanel.h
 * @brief 控制面板组件头文件
 *
 * 定义算法参数设置和工具控制的界面组件
 * 采用垂直布局，包含算法选择、画笔设置等功能区域
 */

#ifndef CONTROLPANEL_H
#define CONTROLPANEL_H

#include <QWidget>  // Qt窗口部件基类

// 前向声明 - 减少编译依赖
class QComboBox;    // 下拉选择框
class QSlider;      // 滑动条
class QSpinBox;     // 数字输入框
class QPushButton;  // 按钮
class QGroupBox;    // 分组框
class QLabel;       // 标签

/**
 * @brief 控制面板类
 *
 * 负责算法参数和工具设置的界面组件：
 * - 算法选择：FMM、Criminisi、深度学习
 * - 画笔参数：大小调节
 * - 开始修复：执行修复操作
 *
 * 设计特点：
 * - 固定宽度布局，适合放在主窗口右侧
 * - 分组组织相关控件，界面清晰
 * - 实时参数反馈和同步
 */
class ControlPanel : public QWidget
{
    Q_OBJECT  // Qt宏，启用信号槽机制

public:
    explicit ControlPanel(QWidget *parent = nullptr);

    // ==================== 参数获取接口 ====================
    QString getSelectedAlgorithm() const;  // 获取当前选择的算法
    int getBrushSize() const;              // 获取当前画笔大小

signals:
    // ==================== 信号定义 ====================
    void algorithmChanged(const QString &algorithm);  // 算法改变信号
    void brushSizeChanged(int size);                  // 画笔大小改变信号
    void startInpainting();                           // 开始修复信号

private slots:
    /**
     * @brief 画笔大小改变槽函数
     * @param value 新的画笔大小值
     *
     * 更新界面显示并发射brushSizeChanged信号
     */
    void onBrushSizeChanged(int value);

private:
    /**
     * @brief 初始化用户界面
     *
     * 构建控制面板的所有UI组件和布局：
     * 1. 算法选择区域
     * 2. 画笔设置区域
     * 3. 开始修复按钮
     */
    void setupUI();

    // ==================== UI组件指针 ====================
    QComboBox *algorithmCombo;     // 算法选择下拉框
    QSlider *brushSizeSlider;      // 画笔大小滑动条
    QSpinBox *brushSizeSpinBox;    // 画笔大小数字输入框
    QPushButton *startButton;      // 开始修复按钮
    QLabel *brushSizeLabel;        // 画笔大小显示标签
};

#endif // CONTROLPANEL_H
